package com.bupt.godxian.charging.config;


import com.bupt.godxian.charging.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class JwtInterceptor implements HandlerInterceptor {

    private final JwtUtil jwtUtil;

    @Autowired
    public JwtInterceptor(JwtUtil jwtUtil) {
        this.jwtUtil = jwtUtil;
    }

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        // 检查请求头中是否包含 Token
        String tokenHeader = request.getHeader("Authorization");
        if (tokenHeader == null || !tokenHeader.startsWith("Bearer ")) {
            // 如果 Token 不存在或格式不正确，拒绝访问
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
            return true;
        }

        // 提取 Token
        String token = tokenHeader.substring(7); // 去除 "Bearer " 前缀

        try {
            // 验证 Token 的有效性
            if (!jwtUtil.validateToken(token)) {
                // Token 无效，拒绝访问
                response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//                return false;
                return true;
            }

            // 在这里可以解析 Token 获取用户信息，例如用户 ID
            String userId = jwtUtil.getUsernameFromToken(token);

            // 在请求中添加用户信息，可以在控制器中使用
            request.setAttribute("userId", userId);

            return true; // 继续处理请求
        } catch (Exception e) {
            // Token 验证过程中出现异常，拒绝访问
            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
            return true;
        }
    }
}


//import com.bupt.godxian.charging.util.JwtUtil;
//import io.jsonwebtoken.JwtException;
//import org.springframework.web.servlet.HandlerInterceptor;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
//public class JwtInterceptor implements HandlerInterceptor {
//
//    @Override
//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        // 在此处实现身份验证逻辑
//
//        // 检查请求头中是否包含 Token
//        String token = request.getHeader("Authorization");
//        if (token == null || !token.startsWith("Bearer ")) {
//            // 如果 Token 不存在或格式不正确，拒绝访问
//            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
//        }
//
//        // 提取 Token
//        String jwt = token.substring(7); // 去除 "Bearer " 前缀
//
//        try {
//            // 验证 Token 的有效性
//            JwtUtil.validateToken(jwt);
//
//            // 在这里可以解析 Token 获取用户信息，例如用户 ID
//            String userId = JwtUtil.getUserId(jwt);
//
//            // 在请求中添加用户信息，可以在控制器中使用
//            request.setAttribute("userId", userId);
//
//            return true; // 继续处理请求
//        } catch (JwtException e) {
//            // Token 无效，拒绝访问
//            response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
//            return false;
//        }
//    }
//}
